package com.learnjdk.pr;

import org.junit.Test;

import java.util.Optional;

/**
 * Optional加强
 * Optional也增加了几个非常酷的方法，现在可以很方便的将一个Optional转换成一个Stream,
 * 或者当一个空Optional时给它一个替代的。
 */
public class OptionalStreamLearn {

    public static void main(String[] args) {
        //orElseThrow,获取到Optional中的值，如果为空就抛出new NoSuchElementException("No value present");
        String javastack = Optional.of("javastack").orElseThrow();
        System.out.println(javastack);

        //统计数量
        long javastack1 = Optional.of("javastack1").stream().count();
        System.out.println(javastack1);

        //空判断
        Object javastack2 = Optional.ofNullable(null)
                .or(() -> Optional.of("javastack"))
                .get();
    }

    @Test
    public void testName() {
        //of方法中如果传入的参数是null,会抛出空指针异常
        //Optional<String> optional = Optional.of(null);
        //ofNullable可以兼容空指针，但是实际传入null后要小心。
        Optional<Object> optional = Optional.ofNullable(null);
        Object abc = optional.orElse("abc");//如果内部引用为空，则返回参数中的引用，否则返回内部引用。
        System.out.println(abc);

        Object orElseThrow = optional.orElseThrow();
        System.out.println(orElseThrow);


    }



}
